package chenji.itemeditor.util.asmtool;

import org.bukkit.Bukkit;

import com.avaje.ebean.enhance.asm.ClassWriter;
import com.avaje.ebean.enhance.asm.FieldVisitor;
import com.avaje.ebean.enhance.asm.Label;
import com.avaje.ebean.enhance.asm.MethodVisitor;
import com.avaje.ebean.enhance.asm.Opcodes;

public class ASMClassMaker implements Opcodes {
	private final String version = Bukkit.getServer().getClass().getPackage().getName().substring(23);

	public byte[] getNMSItem() {
		ClassWriter cw = new ClassWriter(0);
		FieldVisitor fv;
		MethodVisitor mv;

		cw.visit(52, ACC_PUBLIC + ACC_SUPER, "chenji/asm/itemeditor/NMSItemTool", null, "chenji/itemeditor/util/NMSItem", new String[] { "chenji/itemeditor/util/asmtool/ASMTool" });

		cw.visitSource("NMSItemTool.java", null);

		{
			fv = cw.visitField(ACC_PRIVATE + ACC_STATIC, "version", "I", null, null);
			fv.visitEnd();
		}
		{
			fv = cw.visitField(ACC_PRIVATE + ACC_STATIC, "name", "Ljava/lang/String;", null, null);
			fv.visitEnd();
		}
		{
			fv = cw.visitField(0, "item", "Lnet/minecraft/server/" + this.version + "/ItemStack;", null, null);
			fv.visitEnd();
		}
		{
			fv = cw.visitField(ACC_PRIVATE, "tag", "Lchenji/itemeditor/nbt/base/NBTTagCompound;", null, null);
			fv.visitEnd();
		}
		{
			fv = cw.visitField(ACC_PRIVATE + ACC_FINAL + ACC_STATIC, "tool", "Lchenji/asm/itemeditor/NBTTagTool;", null, null);
			fv.visitEnd();
		}
		{
			mv = cw.visitMethod(ACC_STATIC, "<clinit>", "()V", null, null);
			mv.visitCode();
			Label l0 = new Label();
			mv.visitLabel(l0);
			mv.visitInsn(ICONST_1);
			mv.visitFieldInsn(PUTSTATIC, "chenji/asm/itemeditor/NMSItemTool", "version", "I");
			Label l1 = new Label();
			mv.visitLabel(l1);
			mv.visitLdcInsn("" + this.version + "");
			mv.visitFieldInsn(PUTSTATIC, "chenji/asm/itemeditor/NMSItemTool", "name", "Ljava/lang/String;");
			Label l2 = new Label();
			mv.visitLabel(l2);
			mv.visitTypeInsn(NEW, "chenji/asm/itemeditor/NBTTagTool");
			mv.visitInsn(DUP);
			mv.visitMethodInsn(INVOKESPECIAL, "chenji/asm/itemeditor/NBTTagTool", "<init>", "()V");
			mv.visitFieldInsn(PUTSTATIC, "chenji/asm/itemeditor/NMSItemTool", "tool", "Lchenji/asm/itemeditor/NBTTagTool;");
			mv.visitInsn(RETURN);
			mv.visitMaxs(2, 0);
			mv.visitEnd();
		}
		{
			mv = cw.visitMethod(ACC_PUBLIC, "<init>", "()V", null, null);
			mv.visitCode();
			Label l0 = new Label();
			mv.visitLabel(l0);
			mv.visitVarInsn(ALOAD, 0);
			mv.visitMethodInsn(INVOKESPECIAL, "chenji/itemeditor/util/NMSItem", "<init>", "()V");
			mv.visitInsn(RETURN);
			Label l1 = new Label();
			mv.visitLabel(l1);
			mv.visitMaxs(1, 1);
			mv.visitEnd();
		}
		{
			mv = cw.visitMethod(ACC_PUBLIC, "loadBukkitItem", "(Lorg/bukkit/inventory/ItemStack;)Lchenji/itemeditor/util/NMSItem;", null, null);
			mv.visitCode();
			Label l0 = new Label();
			mv.visitLabel(l0);
			mv.visitVarInsn(ALOAD, 0);
			mv.visitVarInsn(ALOAD, 1);
			mv.visitMethodInsn(INVOKESTATIC, "org/bukkit/craftbukkit/" + this.version + "/inventory/CraftItemStack", "asNMSCopy",
					"(Lorg/bukkit/inventory/ItemStack;)Lnet/minecraft/server/" + this.version + "/ItemStack;");
			mv.visitFieldInsn(PUTFIELD, "chenji/asm/itemeditor/NMSItemTool", "item", "Lnet/minecraft/server/" + this.version + "/ItemStack;");
			Label l1 = new Label();
			mv.visitLabel(l1);
			mv.visitVarInsn(ALOAD, 0);
			mv.visitMethodInsn(INVOKESPECIAL, "chenji/asm/itemeditor/NMSItemTool", "loadTag", "()V");
			Label l2 = new Label();
			mv.visitLabel(l2);
			mv.visitVarInsn(ALOAD, 0);
			mv.visitInsn(ARETURN);
			Label l3 = new Label();
			mv.visitLabel(l3);
			mv.visitMaxs(2, 2);
			mv.visitEnd();
		}
		{
			mv = cw.visitMethod(ACC_PRIVATE, "loadTag", "()V", null, null);
			mv.visitCode();
			Label l0 = new Label();
			mv.visitLabel(l0);
			mv.visitVarInsn(ALOAD, 0);
			mv.visitFieldInsn(GETFIELD, "chenji/asm/itemeditor/NMSItemTool", "item", "Lnet/minecraft/server/" + this.version + "/ItemStack;");
			mv.visitMethodInsn(INVOKEVIRTUAL, "net/minecraft/server/" + this.version + "/ItemStack", "hasTag", "()Z");
			Label l1 = new Label();
			mv.visitJumpInsn(IFEQ, l1);
			Label l2 = new Label();
			mv.visitLabel(l2);
			mv.visitVarInsn(ALOAD, 0);
			mv.visitFieldInsn(GETSTATIC, "chenji/asm/itemeditor/NMSItemTool", "tool", "Lchenji/asm/itemeditor/NBTTagTool;");
			mv.visitVarInsn(ALOAD, 0);
			mv.visitFieldInsn(GETFIELD, "chenji/asm/itemeditor/NMSItemTool", "item", "Lnet/minecraft/server/" + this.version + "/ItemStack;");
			mv.visitMethodInsn(INVOKEVIRTUAL, "net/minecraft/server/" + this.version + "/ItemStack", "getTag", "()Lnet/minecraft/server/" + this.version + "/NBTTagCompound;");
			mv.visitMethodInsn(INVOKEVIRTUAL, "chenji/asm/itemeditor/NBTTagTool", "asLocalNBTTagCompoundCopy", "(Ljava/lang/Object;)Lchenji/itemeditor/nbt/base/NBTTagCompound;");
			mv.visitFieldInsn(PUTFIELD, "chenji/asm/itemeditor/NMSItemTool", "tag", "Lchenji/itemeditor/nbt/base/NBTTagCompound;");
			Label l3 = new Label();
			mv.visitLabel(l3);
			Label l4 = new Label();
			mv.visitJumpInsn(GOTO, l4);
			mv.visitLabel(l1);
			mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
			mv.visitVarInsn(ALOAD, 0);
			mv.visitTypeInsn(NEW, "chenji/itemeditor/nbt/base/NBTTagCompound");
			mv.visitInsn(DUP);
			mv.visitMethodInsn(INVOKESPECIAL, "chenji/itemeditor/nbt/base/NBTTagCompound", "<init>", "()V");
			mv.visitFieldInsn(PUTFIELD, "chenji/asm/itemeditor/NMSItemTool", "tag", "Lchenji/itemeditor/nbt/base/NBTTagCompound;");
			mv.visitLabel(l4);
			mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
			mv.visitInsn(RETURN);
			Label l5 = new Label();
			mv.visitLabel(l5);
			mv.visitMaxs(3, 1);
			mv.visitEnd();
		}
		{
			mv = cw.visitMethod(ACC_PUBLIC, "setCount", "(I)Lchenji/itemeditor/util/NMSItem;", null, null);
			mv.visitCode();
			Label l0 = new Label();
			mv.visitLabel(l0);
			mv.visitVarInsn(ALOAD, 0);
			mv.visitFieldInsn(GETFIELD, "chenji/asm/itemeditor/NMSItemTool", "item", "Lnet/minecraft/server/" + this.version + "/ItemStack;");
			mv.visitVarInsn(ILOAD, 1);
			mv.visitFieldInsn(PUTFIELD, "net/minecraft/server/" + this.version + "/ItemStack", "count", "I");
			Label l1 = new Label();
			mv.visitLabel(l1);
			mv.visitVarInsn(ALOAD, 0);
			mv.visitInsn(ARETURN);
			Label l2 = new Label();
			mv.visitLabel(l2);
			mv.visitMaxs(2, 2);
			mv.visitEnd();
		}
		{
			mv = cw.visitMethod(ACC_PUBLIC, "setData", "(I)Lchenji/itemeditor/util/NMSItem;", null, null);
			mv.visitCode();
			Label l0 = new Label();
			mv.visitLabel(l0);
			mv.visitVarInsn(ALOAD, 0);
			mv.visitFieldInsn(GETFIELD, "chenji/asm/itemeditor/NMSItemTool", "item", "Lnet/minecraft/server/" + this.version + "/ItemStack;");
			mv.visitVarInsn(ILOAD, 1);
			mv.visitMethodInsn(INVOKEVIRTUAL, "net/minecraft/server/" + this.version + "/ItemStack", "setData", "(I)V");
			Label l1 = new Label();
			mv.visitLabel(l1);
			mv.visitVarInsn(ALOAD, 0);
			mv.visitInsn(ARETURN);
			Label l2 = new Label();
			mv.visitLabel(l2);
			mv.visitMaxs(2, 2);
			mv.visitEnd();
		}
		{
			mv = cw.visitMethod(ACC_PUBLIC, "setRepairCost", "(I)Lchenji/itemeditor/util/NMSItem;", null, null);
			mv.visitCode();
			Label l0 = new Label();
			mv.visitLabel(l0);
			mv.visitVarInsn(ALOAD, 0);
			mv.visitFieldInsn(GETFIELD, "chenji/asm/itemeditor/NMSItemTool", "item", "Lnet/minecraft/server/" + this.version + "/ItemStack;");
			mv.visitVarInsn(ILOAD, 1);
			mv.visitMethodInsn(INVOKEVIRTUAL, "net/minecraft/server/" + this.version + "/ItemStack", "setRepairCost", "(I)V");
			Label l1 = new Label();
			mv.visitLabel(l1);
			mv.visitVarInsn(ALOAD, 0);
			mv.visitInsn(ARETURN);
			Label l2 = new Label();
			mv.visitLabel(l2);
			mv.visitMaxs(2, 2);
			mv.visitEnd();
		}
		{
			mv = cw.visitMethod(ACC_PUBLIC, "getBukkitItem", "()Lorg/bukkit/inventory/ItemStack;", null, null);
			mv.visitCode();
			Label l0 = new Label();
			mv.visitLabel(l0);
			mv.visitVarInsn(ALOAD, 0);
			mv.visitMethodInsn(INVOKESPECIAL, "chenji/asm/itemeditor/NMSItemTool", "updateTag", "()V");
			Label l1 = new Label();
			mv.visitLabel(l1);
			mv.visitVarInsn(ALOAD, 0);
			mv.visitFieldInsn(GETFIELD, "chenji/asm/itemeditor/NMSItemTool", "item", "Lnet/minecraft/server/" + this.version + "/ItemStack;");
			mv.visitMethodInsn(INVOKESTATIC, "org/bukkit/craftbukkit/" + this.version + "/inventory/CraftItemStack", "asBukkitCopy",
					"(Lnet/minecraft/server/" + this.version + "/ItemStack;)Lorg/bukkit/inventory/ItemStack;");
			mv.visitInsn(ARETURN);
			Label l2 = new Label();
			mv.visitLabel(l2);
			mv.visitMaxs(1, 1);
			mv.visitEnd();
		}
		{
			mv = cw.visitMethod(ACC_PUBLIC, "getNMSItem", "()Ljava/lang/Object;", null, null);
			mv.visitCode();
			Label l0 = new Label();
			mv.visitLabel(l0);
			mv.visitVarInsn(ALOAD, 0);
			mv.visitMethodInsn(INVOKESPECIAL, "chenji/asm/itemeditor/NMSItemTool", "updateTag", "()V");
			Label l1 = new Label();
			mv.visitLabel(l1);
			mv.visitVarInsn(ALOAD, 0);
			mv.visitFieldInsn(GETFIELD, "chenji/asm/itemeditor/NMSItemTool", "item", "Lnet/minecraft/server/" + this.version + "/ItemStack;");
			mv.visitInsn(ARETURN);
			Label l2 = new Label();
			mv.visitLabel(l2);
			mv.visitMaxs(1, 1);
			mv.visitEnd();
		}
		{
			mv = cw.visitMethod(ACC_PUBLIC, "getNMSVersion", "()Ljava/lang/String;", null, null);
			mv.visitCode();
			Label l0 = new Label();
			mv.visitLabel(l0);
			mv.visitFieldInsn(GETSTATIC, "chenji/asm/itemeditor/NMSItemTool", "name", "Ljava/lang/String;");
			mv.visitInsn(ARETURN);
			Label l1 = new Label();
			mv.visitLabel(l1);
			mv.visitMaxs(1, 1);
			mv.visitEnd();
		}
		{
			mv = cw.visitMethod(ACC_PUBLIC, "getVersion", "()I", null, null);
			mv.visitCode();
			Label l0 = new Label();
			mv.visitLabel(l0);
			mv.visitFieldInsn(GETSTATIC, "chenji/asm/itemeditor/NMSItemTool", "version", "I");
			mv.visitInsn(IRETURN);
			Label l1 = new Label();
			mv.visitLabel(l1);
			mv.visitMaxs(1, 1);
			mv.visitEnd();
		}
		{
			mv = cw.visitMethod(ACC_PUBLIC, "setTag", "(Lchenji/itemeditor/nbt/base/NBTTagCompound;)Lchenji/itemeditor/util/NMSItem;", null, null);
			mv.visitCode();
			Label l0 = new Label();
			mv.visitLabel(l0);
			mv.visitVarInsn(ALOAD, 0);
			mv.visitVarInsn(ALOAD, 1);
			mv.visitFieldInsn(PUTFIELD, "chenji/asm/itemeditor/NMSItemTool", "tag", "Lchenji/itemeditor/nbt/base/NBTTagCompound;");
			Label l1 = new Label();
			mv.visitLabel(l1);
			mv.visitVarInsn(ALOAD, 0);
			mv.visitInsn(ARETURN);
			Label l2 = new Label();
			mv.visitLabel(l2);
			mv.visitMaxs(2, 2);
			mv.visitEnd();
		}
		{
			mv = cw.visitMethod(ACC_PUBLIC, "getTag", "()Lchenji/itemeditor/nbt/base/NBTTagCompound;", null, null);
			mv.visitCode();
			Label l0 = new Label();
			mv.visitLabel(l0);
			mv.visitVarInsn(ALOAD, 0);
			mv.visitFieldInsn(GETFIELD, "chenji/asm/itemeditor/NMSItemTool", "tag", "Lchenji/itemeditor/nbt/base/NBTTagCompound;");
			mv.visitInsn(ARETURN);
			Label l1 = new Label();
			mv.visitLabel(l1);
			mv.visitMaxs(1, 1);
			mv.visitEnd();
		}
		{
			mv = cw.visitMethod(ACC_PUBLIC, "setTag", "(Ljava/lang/Object;)Lchenji/itemeditor/util/NMSItem;", null, null);
			mv.visitCode();
			Label l0 = new Label();
			mv.visitLabel(l0);
			mv.visitVarInsn(ALOAD, 1);
			mv.visitTypeInsn(INSTANCEOF, "net/minecraft/server/" + this.version + "/NBTTagCompound");
			Label l1 = new Label();
			mv.visitJumpInsn(IFNE, l1);
			Label l2 = new Label();
			mv.visitLabel(l2);
			mv.visitTypeInsn(NEW, "java/lang/IllegalArgumentException");
			mv.visitInsn(DUP);
			mv.visitTypeInsn(NEW, "java/lang/StringBuilder");
			mv.visitInsn(DUP);
			mv.visitLdcInsn("\u9519\u8bef\uff0c");
			mv.visitMethodInsn(INVOKESPECIAL, "java/lang/StringBuilder", "<init>", "(Ljava/lang/String;)V");
			mv.visitVarInsn(ALOAD, 1);
			mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Object", "getClass", "()Ljava/lang/Class;");
			mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/Class", "getName", "()Ljava/lang/String;");
			mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/StringBuilder", "append", "(Ljava/lang/String;)Ljava/lang/StringBuilder;");
			mv.visitLdcInsn("\u4e0d\u662fNBTTagCompound");
			mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/StringBuilder", "append", "(Ljava/lang/String;)Ljava/lang/StringBuilder;");
			mv.visitMethodInsn(INVOKEVIRTUAL, "java/lang/StringBuilder", "toString", "()Ljava/lang/String;");
			mv.visitMethodInsn(INVOKESPECIAL, "java/lang/IllegalArgumentException", "<init>", "(Ljava/lang/String;)V");
			mv.visitInsn(ATHROW);
			mv.visitLabel(l1);
			mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
			mv.visitVarInsn(ALOAD, 0);
			mv.visitFieldInsn(GETFIELD, "chenji/asm/itemeditor/NMSItemTool", "item", "Lnet/minecraft/server/" + this.version + "/ItemStack;");
			mv.visitVarInsn(ALOAD, 1);
			mv.visitTypeInsn(CHECKCAST, "net/minecraft/server/" + this.version + "/NBTTagCompound");
			mv.visitMethodInsn(INVOKEVIRTUAL, "net/minecraft/server/" + this.version + "/ItemStack", "setTag", "(Lnet/minecraft/server/" + this.version + "/NBTTagCompound;)V");
			Label l3 = new Label();
			mv.visitLabel(l3);
			mv.visitVarInsn(ALOAD, 0);
			mv.visitInsn(ARETURN);
			Label l4 = new Label();
			mv.visitLabel(l4);
			mv.visitMaxs(5, 2);
			mv.visitEnd();
		}
		{
			mv = cw.visitMethod(ACC_PUBLIC, "getNMSTag", "()Ljava/lang/Object;", null, null);
			mv.visitCode();
			Label l0 = new Label();
			mv.visitLabel(l0);
			mv.visitVarInsn(ALOAD, 0);
			mv.visitFieldInsn(GETFIELD, "chenji/asm/itemeditor/NMSItemTool", "item", "Lnet/minecraft/server/" + this.version + "/ItemStack;");
			mv.visitMethodInsn(INVOKEVIRTUAL, "net/minecraft/server/" + this.version + "/ItemStack", "getTag", "()Lnet/minecraft/server/" + this.version + "/NBTTagCompound;");
			mv.visitInsn(ARETURN);
			Label l1 = new Label();
			mv.visitLabel(l1);
			mv.visitMaxs(1, 1);
			mv.visitEnd();
		}
		{
			mv = cw.visitMethod(ACC_PRIVATE, "updateTag", "()V", null, null);
			mv.visitCode();
			Label l0 = new Label();
			mv.visitLabel(l0);
			mv.visitVarInsn(ALOAD, 0);
			mv.visitFieldInsn(GETFIELD, "chenji/asm/itemeditor/NMSItemTool", "item", "Lnet/minecraft/server/" + this.version + "/ItemStack;");
			mv.visitFieldInsn(GETSTATIC, "chenji/asm/itemeditor/NMSItemTool", "tool", "Lchenji/asm/itemeditor/NBTTagTool;");
			mv.visitVarInsn(ALOAD, 0);
			mv.visitFieldInsn(GETFIELD, "chenji/asm/itemeditor/NMSItemTool", "tag", "Lchenji/itemeditor/nbt/base/NBTTagCompound;");
			mv.visitMethodInsn(INVOKEVIRTUAL, "chenji/asm/itemeditor/NBTTagTool", "asNMSNBTTagCompoundCopy", "(Lchenji/itemeditor/nbt/base/NBTBase;)Ljava/lang/Object;");
			mv.visitTypeInsn(CHECKCAST, "net/minecraft/server/" + this.version + "/NBTTagCompound");
			mv.visitMethodInsn(INVOKEVIRTUAL, "net/minecraft/server/" + this.version + "/ItemStack", "setTag", "(Lnet/minecraft/server/" + this.version + "/NBTTagCompound;)V");
			Label l1 = new Label();
			mv.visitLabel(l1);
			mv.visitInsn(RETURN);
			Label l2 = new Label();
			mv.visitLabel(l2);
			mv.visitMaxs(3, 1);
			mv.visitEnd();
		}
		cw.visitEnd();

		return cw.toByteArray();
	}

	public byte[] getNBTTagTool() {

		ClassWriter cw = new ClassWriter(0);
		FieldVisitor fv;
		MethodVisitor mv;

		cw.visit(52, ACC_PUBLIC + ACC_SUPER, "chenji/asm/itemeditor/NBTTagTool", null, "java/lang/Object", new String[] { "chenji/itemeditor/util/asmtool/ASMTool" });

		cw.visitSource("NBTTagTool.java", null);

		{
			fv = cw.visitField(ACC_PRIVATE + ACC_STATIC, "version", "I", null, null);
			fv.visitEnd();
		}
		{
			fv = cw.visitField(ACC_PRIVATE + ACC_STATIC, "name", "Ljava/lang/String;", null, null);
			fv.visitEnd();
		}
		{
			fv = cw.visitField(ACC_PRIVATE + ACC_STATIC + ACC_SYNTHETIC, "$SWITCH_TABLE$chenji$itemeditor$nbt$base$NBTBaseType", "[I", null, null);
			fv.visitEnd();
		}
		{
			mv = cw.visitMethod(ACC_STATIC, "<clinit>", "()V", null, null);
			mv.visitCode();
			Label l0 = new Label();
			mv.visitLabel(l0);
			mv.visitInsn(ICONST_1);
			mv.visitFieldInsn(PUTSTATIC, "chenji/asm/itemeditor/NBTTagTool", "version", "I");
			Label l1 = new Label();
			mv.visitLabel(l1);
			mv.visitLdcInsn("" + this.version + "");
			mv.visitFieldInsn(PUTSTATIC, "chenji/asm/itemeditor/NBTTagTool", "name", "Ljava/lang/String;");
			mv.visitInsn(RETURN);
			mv.visitMaxs(1, 0);
			mv.visitEnd();
		}
		{
			mv = cw.visitMethod(ACC_PUBLIC, "<init>", "()V", null, null);
			mv.visitCode();
			Label l0 = new Label();
			mv.visitLabel(l0);
			mv.visitVarInsn(ALOAD, 0);
			mv.visitMethodInsn(INVOKESPECIAL, "java/lang/Object", "<init>", "()V");
			mv.visitInsn(RETURN);
			Label l1 = new Label();
			mv.visitLabel(l1);
			mv.visitMaxs(1, 1);
			mv.visitEnd();
		}
		{
			mv = cw.visitMethod(ACC_PUBLIC, "asNMSNBTBaseCopy", "(Lchenji/itemeditor/nbt/base/NBTBase;)Ljava/lang/Object;", null, null);
			mv.visitCode();
			Label l0 = new Label();
			mv.visitLabel(l0);
			mv.visitVarInsn(ALOAD, 1);
			Label l1 = new Label();
			mv.visitJumpInsn(IFNONNULL, l1);
			Label l2 = new Label();
			mv.visitLabel(l2);
			mv.visitInsn(ACONST_NULL);
			mv.visitInsn(ARETURN);
			mv.visitLabel(l1);
			mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
			mv.visitMethodInsn(INVOKESTATIC, "chenji/asm/itemeditor/NBTTagTool", "$SWITCH_TABLE$chenji$itemeditor$nbt$base$NBTBaseType", "()[I");
			Label l3 = new Label();
			mv.visitLabel(l3);
			mv.visitVarInsn(ALOAD, 1);
			mv.visitMethodInsn(INVOKEVIRTUAL, "chenji/itemeditor/nbt/base/NBTBase", "getType", "()Lchenji/itemeditor/nbt/base/NBTBaseType;");
			mv.visitMethodInsn(INVOKEVIRTUAL, "chenji/itemeditor/nbt/base/NBTBaseType", "ordinal", "()I");
			mv.visitInsn(IALOAD);
			Label l4 = new Label();
			Label l5 = new Label();
			Label l6 = new Label();
			Label l7 = new Label();
			Label l8 = new Label();
			Label l9 = new Label();
			Label l10 = new Label();
			Label l11 = new Label();
			Label l12 = new Label();
			Label l13 = new Label();
			Label l14 = new Label();
			Label l15 = new Label();
			mv.visitTableSwitchInsn(1, 11, l15, new Label[] { l4, l5, l6, l7, l8, l9, l10, l11, l12, l13, l14 });
			mv.visitLabel(l8);
			mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
			mv.visitTypeInsn(NEW, "net/minecraft/server/" + this.version + "/NBTTagInt");
			mv.visitInsn(DUP);
			mv.visitVarInsn(ALOAD, 1);
			mv.visitTypeInsn(CHECKCAST, "chenji/itemeditor/nbt/base/NBTTagInt");
			mv.visitMethodInsn(INVOKEVIRTUAL, "chenji/itemeditor/nbt/base/NBTTagInt", "getValue", "()I");
			mv.visitMethodInsn(INVOKESPECIAL, "net/minecraft/server/" + this.version + "/NBTTagInt", "<init>", "(I)V");
			mv.visitInsn(ARETURN);
			mv.visitLabel(l5);
			mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
			mv.visitTypeInsn(NEW, "net/minecraft/server/" + this.version + "/NBTTagByte");
			mv.visitInsn(DUP);
			mv.visitVarInsn(ALOAD, 1);
			mv.visitTypeInsn(CHECKCAST, "chenji/itemeditor/nbt/base/NBTTagByte");
			mv.visitMethodInsn(INVOKEVIRTUAL, "chenji/itemeditor/nbt/base/NBTTagByte", "getValue", "()B");
			mv.visitMethodInsn(INVOKESPECIAL, "net/minecraft/server/" + this.version + "/NBTTagByte", "<init>", "(B)V");
			mv.visitInsn(ARETURN);
			mv.visitLabel(l10);
			mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
			mv.visitTypeInsn(NEW, "net/minecraft/server/" + this.version + "/NBTTagByteArray");
			mv.visitInsn(DUP);
			mv.visitVarInsn(ALOAD, 1);
			mv.visitTypeInsn(CHECKCAST, "chenji/itemeditor/nbt/base/NBTTagByteArray");
			mv.visitMethodInsn(INVOKEVIRTUAL, "chenji/itemeditor/nbt/base/NBTTagByteArray", "getValue", "()[B");
			mv.visitMethodInsn(INVOKESPECIAL, "net/minecraft/server/" + this.version + "/NBTTagByteArray", "<init>", "([B)V");
			mv.visitInsn(ARETURN);
			mv.visitLabel(l6);
			mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
			mv.visitTypeInsn(NEW, "net/minecraft/server/" + this.version + "/NBTTagDouble");
			mv.visitInsn(DUP);
			mv.visitVarInsn(ALOAD, 1);
			mv.visitTypeInsn(CHECKCAST, "chenji/itemeditor/nbt/base/NBTTagDouble");
			mv.visitMethodInsn(INVOKEVIRTUAL, "chenji/itemeditor/nbt/base/NBTTagDouble", "getValue", "()D");
			mv.visitMethodInsn(INVOKESPECIAL, "net/minecraft/server/" + this.version + "/NBTTagDouble", "<init>", "(D)V");
			mv.visitInsn(ARETURN);
			mv.visitLabel(l7);
			mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
			mv.visitTypeInsn(NEW, "net/minecraft/server/" + this.version + "/NBTTagFloat");
			mv.visitInsn(DUP);
			mv.visitVarInsn(ALOAD, 1);
			mv.visitTypeInsn(CHECKCAST, "chenji/itemeditor/nbt/base/NBTTagFloat");
			mv.visitMethodInsn(INVOKEVIRTUAL, "chenji/itemeditor/nbt/base/NBTTagFloat", "getValue", "()F");
			mv.visitMethodInsn(INVOKESPECIAL, "net/minecraft/server/" + this.version + "/NBTTagFloat", "<init>", "(F)V");
			mv.visitInsn(ARETURN);
			mv.visitLabel(l9);
			mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
			mv.visitTypeInsn(NEW, "net/minecraft/server/" + this.version + "/NBTTagIntArray");
			mv.visitInsn(DUP);
			mv.visitVarInsn(ALOAD, 1);
			mv.visitTypeInsn(CHECKCAST, "chenji/itemeditor/nbt/base/NBTTagIntArray");
			mv.visitMethodInsn(INVOKEVIRTUAL, "chenji/itemeditor/nbt/base/NBTTagIntArray", "getValue", "()[I");
			mv.visitMethodInsn(INVOKESPECIAL, "net/minecraft/server/" + this.version + "/NBTTagIntArray", "<init>", "([I)V");
			mv.visitInsn(ARETURN);
			mv.visitLabel(l13);
			mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
			mv.visitTypeInsn(NEW, "net/minecraft/server/" + this.version + "/NBTTagLong");
			mv.visitInsn(DUP);
			mv.visitVarInsn(ALOAD, 1);
			mv.visitTypeInsn(CHECKCAST, "chenji/itemeditor/nbt/base/NBTTagLong");
			mv.visitMethodInsn(INVOKEVIRTUAL, "chenji/itemeditor/nbt/base/NBTTagLong", "getValue", "()J");
			mv.visitMethodInsn(INVOKESPECIAL, "net/minecraft/server/" + this.version + "/NBTTagLong", "<init>", "(J)V");
			mv.visitInsn(ARETURN);
			mv.visitLabel(l11);
			mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
			mv.visitVarInsn(ALOAD, 0);
			mv.visitVarInsn(ALOAD, 1);
			mv.visitMethodInsn(INVOKEVIRTUAL, "chenji/asm/itemeditor/NBTTagTool", "asNMSNBTTagCompoundCopy", "(Lchenji/itemeditor/nbt/base/NBTBase;)Ljava/lang/Object;");
			mv.visitInsn(ARETURN);
			mv.visitLabel(l12);
			mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
			mv.visitVarInsn(ALOAD, 0);
			mv.visitVarInsn(ALOAD, 1);
			mv.visitMethodInsn(INVOKEVIRTUAL, "chenji/asm/itemeditor/NBTTagTool", "asNMSNBTTagListCopy", "(Lchenji/itemeditor/nbt/base/NBTBase;)Ljava/lang/Object;");
			mv.visitInsn(ARETURN);
			mv.visitLabel(l14);
			mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
			mv.visitTypeInsn(NEW, "net/minecraft/server/" + this.version + "/NBTTagShort");
			mv.visitInsn(DUP);
			mv.visitVarInsn(ALOAD, 1);
			mv.visitTypeInsn(CHECKCAST, "chenji/itemeditor/nbt/base/NBTTagShort");
			mv.visitMethodInsn(INVOKEVIRTUAL, "chenji/itemeditor/nbt/base/NBTTagShort", "getValue", "()S");
			mv.visitMethodInsn(INVOKESPECIAL, "net/minecraft/server/" + this.version + "/NBTTagShort", "<init>", "(S)V");
			mv.visitInsn(ARETURN);
			mv.visitLabel(l4);
			mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
			mv.visitTypeInsn(NEW, "net/minecraft/server/" + this.version + "/NBTTagString");
			mv.visitInsn(DUP);
			mv.visitVarInsn(ALOAD, 1);
			mv.visitTypeInsn(CHECKCAST, "chenji/itemeditor/nbt/base/NBTTagString");
			mv.visitMethodInsn(INVOKEVIRTUAL, "chenji/itemeditor/nbt/base/NBTTagString", "getValue", "()Ljava/lang/String;");
			mv.visitMethodInsn(INVOKESPECIAL, "net/minecraft/server/" + this.version + "/NBTTagString", "<init>", "(Ljava/lang/String;)V");
			mv.visitInsn(ARETURN);
			mv.visitLabel(l15);
			mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
			mv.visitInsn(ACONST_NULL);
			mv.visitInsn(ARETURN);
			Label l16 = new Label();
			mv.visitLabel(l16);
			mv.visitMaxs(4, 2);
			mv.visitEnd();
		}
		{
			mv = cw.visitMethod(ACC_PUBLIC, "asNMSNBTTagListCopy", "(Lchenji/itemeditor/nbt/base/NBTBase;)Ljava/lang/Object;", null, null);
			mv.visitCode();
			Label l0 = new Label();
			mv.visitLabel(l0);
			mv.visitVarInsn(ALOAD, 1);
			Label l1 = new Label();
			mv.visitJumpInsn(IFNONNULL, l1);
			Label l2 = new Label();
			mv.visitLabel(l2);
			mv.visitInsn(ACONST_NULL);
			mv.visitInsn(ARETURN);
			mv.visitLabel(l1);
			mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
			mv.visitVarInsn(ALOAD, 1);
			mv.visitMethodInsn(INVOKEVIRTUAL, "chenji/itemeditor/nbt/base/NBTBase", "getType", "()Lchenji/itemeditor/nbt/base/NBTBaseType;");
			mv.visitFieldInsn(GETSTATIC, "chenji/itemeditor/nbt/base/NBTBaseType", "NBTTAGLIST", "Lchenji/itemeditor/nbt/base/NBTBaseType;");
			mv.visitMethodInsn(INVOKEVIRTUAL, "chenji/itemeditor/nbt/base/NBTBaseType", "equals", "(Ljava/lang/Object;)Z");
			Label l3 = new Label();
			mv.visitJumpInsn(IFNE, l3);
			Label l4 = new Label();
			mv.visitLabel(l4);
			mv.visitTypeInsn(NEW, "net/minecraft/server/" + this.version + "/NBTTagList");
			mv.visitInsn(DUP);
			mv.visitMethodInsn(INVOKESPECIAL, "net/minecraft/server/" + this.version + "/NBTTagList", "<init>", "()V");
			mv.visitInsn(ARETURN);
			mv.visitLabel(l3);
			mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
			mv.visitVarInsn(ALOAD, 1);
			mv.visitTypeInsn(CHECKCAST, "chenji/itemeditor/nbt/base/NBTTagList");
			mv.visitVarInsn(ASTORE, 2);
			Label l5 = new Label();
			mv.visitLabel(l5);
			mv.visitTypeInsn(NEW, "net/minecraft/server/" + this.version + "/NBTTagList");
			mv.visitInsn(DUP);
			mv.visitMethodInsn(INVOKESPECIAL, "net/minecraft/server/" + this.version + "/NBTTagList", "<init>", "()V");
			mv.visitVarInsn(ASTORE, 3);
			Label l6 = new Label();
			mv.visitLabel(l6);
			mv.visitInsn(ICONST_0);
			mv.visitVarInsn(ISTORE, 4);
			Label l7 = new Label();
			mv.visitLabel(l7);
			mv.visitVarInsn(ALOAD, 2);
			mv.visitMethodInsn(INVOKEVIRTUAL, "chenji/itemeditor/nbt/base/NBTTagList", "size", "()I");
			mv.visitInsn(ICONST_1);
			mv.visitInsn(ISUB);
			mv.visitVarInsn(ISTORE, 5);
			Label l8 = new Label();
			mv.visitLabel(l8);
			Label l9 = new Label();
			mv.visitJumpInsn(GOTO, l9);
			Label l10 = new Label();
			mv.visitLabel(l10);
			mv.visitFrame(Opcodes.F_FULL, 6, new Object[] { "chenji/asm/itemeditor/NBTTagTool", "chenji/itemeditor/nbt/base/NBTBase", "chenji/itemeditor/nbt/base/NBTTagList",
					"net/minecraft/server/" + this.version + "/NBTTagList", Opcodes.INTEGER, Opcodes.INTEGER }, 0, new Object[] {});
			mv.visitVarInsn(ALOAD, 2);
			mv.visitVarInsn(ILOAD, 4);
			mv.visitMethodInsn(INVOKEVIRTUAL, "chenji/itemeditor/nbt/base/NBTTagList", "get", "(I)Lchenji/itemeditor/nbt/base/NBTBase;");
			mv.visitVarInsn(ASTORE, 6);
			Label l11 = new Label();
			mv.visitLabel(l11);
			mv.visitVarInsn(ALOAD, 6);
			Label l12 = new Label();
			mv.visitJumpInsn(IFNONNULL, l12);
			Label l13 = new Label();
			mv.visitLabel(l13);
			mv.visitVarInsn(ALOAD, 3);
			mv.visitInsn(ACONST_NULL);
			mv.visitMethodInsn(INVOKEVIRTUAL, "net/minecraft/server/" + this.version + "/NBTTagList", "add", "(Lnet/minecraft/server/" + this.version + "/NBTBase;)V");
			Label l14 = new Label();
			mv.visitLabel(l14);
			mv.visitJumpInsn(GOTO, l9);
			mv.visitLabel(l12);
			mv.visitFrame(Opcodes.F_APPEND, 1, new Object[] { "chenji/itemeditor/nbt/base/NBTBase" }, 0, null);
			mv.visitVarInsn(ALOAD, 6);
			mv.visitMethodInsn(INVOKEVIRTUAL, "chenji/itemeditor/nbt/base/NBTBase", "getType", "()Lchenji/itemeditor/nbt/base/NBTBaseType;");
			mv.visitFieldInsn(GETSTATIC, "chenji/itemeditor/nbt/base/NBTBaseType", "BOOLEAN", "Lchenji/itemeditor/nbt/base/NBTBaseType;");
			mv.visitMethodInsn(INVOKEVIRTUAL, "chenji/itemeditor/nbt/base/NBTBaseType", "equals", "(Ljava/lang/Object;)Z");
			Label l15 = new Label();
			mv.visitJumpInsn(IFEQ, l15);
			Label l16 = new Label();
			mv.visitLabel(l16);
			mv.visitJumpInsn(GOTO, l9);
			mv.visitLabel(l15);
			mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
			mv.visitVarInsn(ALOAD, 0);
			mv.visitVarInsn(ALOAD, 6);
			mv.visitMethodInsn(INVOKEVIRTUAL, "chenji/asm/itemeditor/NBTTagTool", "asNMSNBTBaseCopy", "(Lchenji/itemeditor/nbt/base/NBTBase;)Ljava/lang/Object;");
			mv.visitTypeInsn(CHECKCAST, "net/minecraft/server/" + this.version + "/NBTBase");
			mv.visitVarInsn(ASTORE, 7);
			Label l17 = new Label();
			mv.visitLabel(l17);
			mv.visitVarInsn(ALOAD, 3);
			mv.visitVarInsn(ALOAD, 7);
			mv.visitMethodInsn(INVOKEVIRTUAL, "net/minecraft/server/" + this.version + "/NBTTagList", "add", "(Lnet/minecraft/server/" + this.version + "/NBTBase;)V");
			Label l18 = new Label();
			mv.visitLabel(l18);
			mv.visitIincInsn(4, 1);
			mv.visitLabel(l9);
			mv.visitFrame(Opcodes.F_CHOP, 1, null, 0, null);
			mv.visitVarInsn(ILOAD, 4);
			mv.visitVarInsn(ILOAD, 5);
			mv.visitJumpInsn(IF_ICMPLE, l10);
			Label l19 = new Label();
			mv.visitLabel(l19);
			mv.visitVarInsn(ALOAD, 3);
			mv.visitInsn(ARETURN);
			Label l20 = new Label();
			mv.visitLabel(l20);
			mv.visitMaxs(2, 8);
			mv.visitEnd();
		}
		{
			mv = cw.visitMethod(ACC_PUBLIC, "asNMSNBTTagCompoundCopy", "(Lchenji/itemeditor/nbt/base/NBTBase;)Ljava/lang/Object;", null, null);
			mv.visitCode();
			Label l0 = new Label();
			mv.visitLabel(l0);
			mv.visitVarInsn(ALOAD, 1);
			Label l1 = new Label();
			mv.visitJumpInsn(IFNONNULL, l1);
			Label l2 = new Label();
			mv.visitLabel(l2);
			mv.visitInsn(ACONST_NULL);
			mv.visitInsn(ARETURN);
			mv.visitLabel(l1);
			mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
			mv.visitVarInsn(ALOAD, 1);
			mv.visitMethodInsn(INVOKEVIRTUAL, "chenji/itemeditor/nbt/base/NBTBase", "getType", "()Lchenji/itemeditor/nbt/base/NBTBaseType;");
			mv.visitFieldInsn(GETSTATIC, "chenji/itemeditor/nbt/base/NBTBaseType", "NBTTAGCOMPOUND", "Lchenji/itemeditor/nbt/base/NBTBaseType;");
			mv.visitMethodInsn(INVOKEVIRTUAL, "chenji/itemeditor/nbt/base/NBTBaseType", "equals", "(Ljava/lang/Object;)Z");
			Label l3 = new Label();
			mv.visitJumpInsn(IFNE, l3);
			Label l4 = new Label();
			mv.visitLabel(l4);
			mv.visitTypeInsn(NEW, "net/minecraft/server/" + this.version + "/NBTTagCompound");
			mv.visitInsn(DUP);
			mv.visitMethodInsn(INVOKESPECIAL, "net/minecraft/server/" + this.version + "/NBTTagCompound", "<init>", "()V");
			mv.visitInsn(ARETURN);
			mv.visitLabel(l3);
			mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
			mv.visitVarInsn(ALOAD, 1);
			mv.visitTypeInsn(CHECKCAST, "chenji/itemeditor/nbt/base/NBTTagCompound");
			mv.visitVarInsn(ASTORE, 2);
			Label l5 = new Label();
			mv.visitLabel(l5);
			mv.visitTypeInsn(NEW, "net/minecraft/server/" + this.version + "/NBTTagCompound");
			mv.visitInsn(DUP);
			mv.visitMethodInsn(INVOKESPECIAL, "net/minecraft/server/" + this.version + "/NBTTagCompound", "<init>", "()V");
			mv.visitVarInsn(ASTORE, 3);
			Label l6 = new Label();
			mv.visitLabel(l6);
			mv.visitVarInsn(ALOAD, 2);
			mv.visitMethodInsn(INVOKEVIRTUAL, "chenji/itemeditor/nbt/base/NBTTagCompound", "keySet", "()Ljava/util/Set;");
			mv.visitMethodInsn(INVOKEINTERFACE, "java/util/Set", "iterator", "()Ljava/util/Iterator;");
			mv.visitVarInsn(ASTORE, 5);
			Label l7 = new Label();
			mv.visitJumpInsn(GOTO, l7);
			Label l8 = new Label();
			mv.visitLabel(l8);
			mv.visitFrame(Opcodes.F_FULL, 6, new Object[] { "chenji/asm/itemeditor/NBTTagTool", "chenji/itemeditor/nbt/base/NBTBase", "chenji/itemeditor/nbt/base/NBTTagCompound",
					"net/minecraft/server/" + this.version + "/NBTTagCompound", Opcodes.TOP, "java/util/Iterator" }, 0, new Object[] {});
			mv.visitVarInsn(ALOAD, 5);
			mv.visitMethodInsn(INVOKEINTERFACE, "java/util/Iterator", "next", "()Ljava/lang/Object;");
			mv.visitTypeInsn(CHECKCAST, "java/lang/String");
			mv.visitVarInsn(ASTORE, 4);
			Label l9 = new Label();
			mv.visitLabel(l9);
			mv.visitVarInsn(ALOAD, 2);
			mv.visitVarInsn(ALOAD, 4);
			mv.visitMethodInsn(INVOKEVIRTUAL, "chenji/itemeditor/nbt/base/NBTTagCompound", "get", "(Ljava/lang/String;)Lchenji/itemeditor/nbt/base/NBTBase;");
			mv.visitVarInsn(ASTORE, 6);
			Label l10 = new Label();
			mv.visitLabel(l10);
			mv.visitVarInsn(ALOAD, 6);
			Label l11 = new Label();
			mv.visitJumpInsn(IFNONNULL, l11);
			Label l12 = new Label();
			mv.visitLabel(l12);
			mv.visitJumpInsn(GOTO, l7);
			mv.visitLabel(l11);
			mv.visitFrame(Opcodes.F_FULL, 7, new Object[] { "chenji/asm/itemeditor/NBTTagTool", "chenji/itemeditor/nbt/base/NBTBase", "chenji/itemeditor/nbt/base/NBTTagCompound",
					"net/minecraft/server/" + this.version + "/NBTTagCompound", "java/lang/String", "java/util/Iterator", "chenji/itemeditor/nbt/base/NBTBase" }, 0, new Object[] {});
			mv.visitVarInsn(ALOAD, 6);
			mv.visitMethodInsn(INVOKEVIRTUAL, "chenji/itemeditor/nbt/base/NBTBase", "getType", "()Lchenji/itemeditor/nbt/base/NBTBaseType;");
			mv.visitFieldInsn(GETSTATIC, "chenji/itemeditor/nbt/base/NBTBaseType", "BOOLEAN", "Lchenji/itemeditor/nbt/base/NBTBaseType;");
			mv.visitMethodInsn(INVOKEVIRTUAL, "chenji/itemeditor/nbt/base/NBTBaseType", "equals", "(Ljava/lang/Object;)Z");
			Label l13 = new Label();
			mv.visitJumpInsn(IFEQ, l13);
			Label l14 = new Label();
			mv.visitLabel(l14);
			mv.visitVarInsn(ALOAD, 6);
			mv.visitTypeInsn(CHECKCAST, "chenji/itemeditor/nbt/base/NBTTagBoolean");
			mv.visitVarInsn(ASTORE, 7);
			Label l15 = new Label();
			mv.visitLabel(l15);
			mv.visitVarInsn(ALOAD, 3);
			mv.visitVarInsn(ALOAD, 4);
			mv.visitVarInsn(ALOAD, 7);
			mv.visitMethodInsn(INVOKEVIRTUAL, "chenji/itemeditor/nbt/base/NBTTagBoolean", "getValue", "()Z");
			mv.visitMethodInsn(INVOKEVIRTUAL, "net/minecraft/server/" + this.version + "/NBTTagCompound", "setBoolean", "(Ljava/lang/String;Z)V");
			Label l16 = new Label();
			mv.visitLabel(l16);
			mv.visitJumpInsn(GOTO, l7);
			mv.visitLabel(l13);
			mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
			mv.visitVarInsn(ALOAD, 0);
			mv.visitVarInsn(ALOAD, 6);
			mv.visitMethodInsn(INVOKEVIRTUAL, "chenji/asm/itemeditor/NBTTagTool", "asNMSNBTBaseCopy", "(Lchenji/itemeditor/nbt/base/NBTBase;)Ljava/lang/Object;");
			mv.visitTypeInsn(CHECKCAST, "net/minecraft/server/" + this.version + "/NBTBase");
			mv.visitVarInsn(ASTORE, 7);
			Label l17 = new Label();
			mv.visitLabel(l17);
			mv.visitVarInsn(ALOAD, 3);
			mv.visitVarInsn(ALOAD, 4);
			mv.visitVarInsn(ALOAD, 7);
			mv.visitMethodInsn(INVOKEVIRTUAL, "net/minecraft/server/" + this.version + "/NBTTagCompound", "set", "(Ljava/lang/String;Lnet/minecraft/server/" + this.version + "/NBTBase;)V");
			mv.visitLabel(l7);
			mv.visitFrame(Opcodes.F_FULL, 6, new Object[] { "chenji/asm/itemeditor/NBTTagTool", "chenji/itemeditor/nbt/base/NBTBase", "chenji/itemeditor/nbt/base/NBTTagCompound",
					"net/minecraft/server/" + this.version + "/NBTTagCompound", Opcodes.TOP, "java/util/Iterator" }, 0, new Object[] {});
			mv.visitVarInsn(ALOAD, 5);
			mv.visitMethodInsn(INVOKEINTERFACE, "java/util/Iterator", "hasNext", "()Z");
			mv.visitJumpInsn(IFNE, l8);
			Label l18 = new Label();
			mv.visitLabel(l18);
			mv.visitVarInsn(ALOAD, 3);
			mv.visitInsn(ARETURN);
			Label l19 = new Label();
			mv.visitLabel(l19);
			mv.visitMaxs(3, 8);
			mv.visitEnd();
		}
		{
			mv = cw.visitMethod(ACC_PUBLIC, "asLocalNBTTagCompoundCopy", "(Ljava/lang/Object;)Lchenji/itemeditor/nbt/base/NBTTagCompound;", null, null);
			mv.visitCode();
			Label l0 = new Label();
			mv.visitLabel(l0);
			mv.visitVarInsn(ALOAD, 1);
			Label l1 = new Label();
			mv.visitJumpInsn(IFNONNULL, l1);
			Label l2 = new Label();
			mv.visitLabel(l2);
			mv.visitInsn(ACONST_NULL);
			mv.visitInsn(ARETURN);
			mv.visitLabel(l1);
			mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
			mv.visitVarInsn(ALOAD, 1);
			mv.visitTypeInsn(INSTANCEOF, "net/minecraft/server/" + this.version + "/NBTTagCompound");
			Label l3 = new Label();
			mv.visitJumpInsn(IFNE, l3);
			Label l4 = new Label();
			mv.visitLabel(l4);
			mv.visitTypeInsn(NEW, "chenji/itemeditor/nbt/base/NBTTagCompound");
			mv.visitInsn(DUP);
			mv.visitMethodInsn(INVOKESPECIAL, "chenji/itemeditor/nbt/base/NBTTagCompound", "<init>", "()V");
			mv.visitInsn(ARETURN);
			mv.visitLabel(l3);
			mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
			mv.visitVarInsn(ALOAD, 1);
			mv.visitTypeInsn(CHECKCAST, "net/minecraft/server/" + this.version + "/NBTTagCompound");
			mv.visitVarInsn(ASTORE, 2);
			Label l5 = new Label();
			mv.visitLabel(l5);
			mv.visitTypeInsn(NEW, "chenji/itemeditor/nbt/base/NBTTagCompound");
			mv.visitInsn(DUP);
			mv.visitMethodInsn(INVOKESPECIAL, "chenji/itemeditor/nbt/base/NBTTagCompound", "<init>", "()V");
			mv.visitVarInsn(ASTORE, 3);
			Label l6 = new Label();
			mv.visitLabel(l6);
			mv.visitVarInsn(ALOAD, 2);
			mv.visitMethodInsn(INVOKEVIRTUAL, "net/minecraft/server/" + this.version + "/NBTTagCompound", "c", "()Ljava/util/Set;");
			mv.visitMethodInsn(INVOKEINTERFACE, "java/util/Set", "iterator", "()Ljava/util/Iterator;");
			mv.visitVarInsn(ASTORE, 5);
			Label l7 = new Label();
			mv.visitJumpInsn(GOTO, l7);
			Label l8 = new Label();
			mv.visitLabel(l8);
			mv.visitFrame(Opcodes.F_FULL, 6, new Object[] { "chenji/asm/itemeditor/NBTTagTool", "java/lang/Object", "net/minecraft/server/" + this.version + "/NBTTagCompound",
					"chenji/itemeditor/nbt/base/NBTTagCompound", Opcodes.TOP, "java/util/Iterator" }, 0, new Object[] {});
			mv.visitVarInsn(ALOAD, 5);
			mv.visitMethodInsn(INVOKEINTERFACE, "java/util/Iterator", "next", "()Ljava/lang/Object;");
			mv.visitTypeInsn(CHECKCAST, "java/lang/String");
			mv.visitVarInsn(ASTORE, 4);
			Label l9 = new Label();
			mv.visitLabel(l9);
			mv.visitVarInsn(ALOAD, 2);
			mv.visitVarInsn(ALOAD, 4);
			mv.visitMethodInsn(INVOKEVIRTUAL, "net/minecraft/server/" + this.version + "/NBTTagCompound", "get", "(Ljava/lang/String;)Lnet/minecraft/server/" + this.version + "/NBTBase;");
			mv.visitVarInsn(ASTORE, 6);
			Label l10 = new Label();
			mv.visitLabel(l10);
			mv.visitVarInsn(ALOAD, 6);
			Label l11 = new Label();
			mv.visitJumpInsn(IFNONNULL, l11);
			Label l12 = new Label();
			mv.visitLabel(l12);
			mv.visitJumpInsn(GOTO, l7);
			mv.visitLabel(l11);
			mv.visitFrame(Opcodes.F_FULL, 7, new Object[] { "chenji/asm/itemeditor/NBTTagTool", "java/lang/Object", "net/minecraft/server/" + this.version + "/NBTTagCompound",
					"chenji/itemeditor/nbt/base/NBTTagCompound", "java/lang/String", "java/util/Iterator", "net/minecraft/server/" + this.version + "/NBTBase" }, 0, new Object[] {});
			mv.visitVarInsn(ALOAD, 0);
			mv.visitVarInsn(ALOAD, 6);
			mv.visitMethodInsn(INVOKEVIRTUAL, "chenji/asm/itemeditor/NBTTagTool", "asLocalNBTBaseCopy", "(Lnet/minecraft/server/" + this.version + "/NBTBase;)Lchenji/itemeditor/nbt/base/NBTBase;");
			mv.visitVarInsn(ASTORE, 7);
			Label l13 = new Label();
			mv.visitLabel(l13);
			mv.visitVarInsn(ALOAD, 3);
			mv.visitVarInsn(ALOAD, 4);
			mv.visitVarInsn(ALOAD, 7);
			mv.visitMethodInsn(INVOKEVIRTUAL, "chenji/itemeditor/nbt/base/NBTTagCompound", "set",
					"(Ljava/lang/String;Lchenji/itemeditor/nbt/base/NBTBase;)Lchenji/itemeditor/nbt/base/NBTTagCompound;");
			mv.visitInsn(POP);
			mv.visitLabel(l7);
			mv.visitFrame(Opcodes.F_FULL, 6, new Object[] { "chenji/asm/itemeditor/NBTTagTool", "java/lang/Object", "net/minecraft/server/" + this.version + "/NBTTagCompound",
					"chenji/itemeditor/nbt/base/NBTTagCompound", Opcodes.TOP, "java/util/Iterator" }, 0, new Object[] {});
			mv.visitVarInsn(ALOAD, 5);
			mv.visitMethodInsn(INVOKEINTERFACE, "java/util/Iterator", "hasNext", "()Z");
			mv.visitJumpInsn(IFNE, l8);
			Label l14 = new Label();
			mv.visitLabel(l14);
			mv.visitVarInsn(ALOAD, 3);
			mv.visitInsn(ARETURN);
			Label l15 = new Label();
			mv.visitLabel(l15);
			mv.visitMaxs(3, 8);
			mv.visitEnd();
		}
		{
			mv = cw.visitMethod(ACC_PUBLIC, "asLocalNBTTagListCopy", "(Ljava/lang/Object;)Lchenji/itemeditor/nbt/base/NBTTagList;", null, null);
			mv.visitCode();
			Label l0 = new Label();
			mv.visitLabel(l0);
			mv.visitVarInsn(ALOAD, 1);
			Label l1 = new Label();
			mv.visitJumpInsn(IFNONNULL, l1);
			Label l2 = new Label();
			mv.visitLabel(l2);
			mv.visitInsn(ACONST_NULL);
			mv.visitInsn(ARETURN);
			mv.visitLabel(l1);
			mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
			mv.visitVarInsn(ALOAD, 1);
			mv.visitTypeInsn(INSTANCEOF, "net/minecraft/server/" + this.version + "/NBTTagList");
			Label l3 = new Label();
			mv.visitJumpInsn(IFNE, l3);
			Label l4 = new Label();
			mv.visitLabel(l4);
			mv.visitTypeInsn(NEW, "chenji/itemeditor/nbt/base/NBTTagList");
			mv.visitInsn(DUP);
			mv.visitMethodInsn(INVOKESPECIAL, "chenji/itemeditor/nbt/base/NBTTagList", "<init>", "()V");
			mv.visitInsn(ARETURN);
			mv.visitLabel(l3);
			mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
			mv.visitVarInsn(ALOAD, 1);
			mv.visitTypeInsn(CHECKCAST, "net/minecraft/server/" + this.version + "/NBTTagList");
			mv.visitVarInsn(ASTORE, 2);
			Label l5 = new Label();
			mv.visitLabel(l5);
			mv.visitTypeInsn(NEW, "chenji/itemeditor/nbt/base/NBTTagList");
			mv.visitInsn(DUP);
			mv.visitMethodInsn(INVOKESPECIAL, "chenji/itemeditor/nbt/base/NBTTagList", "<init>", "()V");
			mv.visitVarInsn(ASTORE, 3);
			Label l6 = new Label();
			mv.visitLabel(l6);
			mv.visitVarInsn(ALOAD, 2);
			mv.visitMethodInsn(INVOKEVIRTUAL, "net/minecraft/server/" + this.version + "/NBTTagList", "size", "()I");
			mv.visitInsn(ICONST_1);
			mv.visitInsn(ISUB);
			mv.visitVarInsn(ISTORE, 4);
			Label l7 = new Label();
			mv.visitLabel(l7);
			mv.visitVarInsn(ILOAD, 4);
			Label l8 = new Label();
			mv.visitJumpInsn(IFGE, l8);
			Label l9 = new Label();
			mv.visitLabel(l9);
			mv.visitVarInsn(ALOAD, 3);
			mv.visitInsn(ARETURN);
			mv.visitLabel(l8);
			mv.visitFrame(Opcodes.F_APPEND, 3, new Object[] { "net/minecraft/server/" + this.version + "/NBTTagList", "chenji/itemeditor/nbt/base/NBTTagList", Opcodes.INTEGER }, 0, null);
			mv.visitInsn(ICONST_0);
			mv.visitVarInsn(ISTORE, 5);
			Label l10 = new Label();
			mv.visitLabel(l10);
			Label l11 = new Label();
			mv.visitJumpInsn(GOTO, l11);
			Label l12 = new Label();
			mv.visitLabel(l12);
			mv.visitFrame(Opcodes.F_APPEND, 1, new Object[] { Opcodes.INTEGER }, 0, null);
			mv.visitVarInsn(ALOAD, 3);
			mv.visitVarInsn(ALOAD, 0);
			mv.visitVarInsn(ALOAD, 2);
			mv.visitVarInsn(ILOAD, 5);
			mv.visitMethodInsn(INVOKEVIRTUAL, "net/minecraft/server/" + this.version + "/NBTTagList", ReflectTool.listBase, "(I)Lnet/minecraft/server/" + this.version + "/NBTBase;");
			mv.visitMethodInsn(INVOKEVIRTUAL, "chenji/asm/itemeditor/NBTTagTool", "asLocalNBTBaseCopy", "(Lnet/minecraft/server/" + this.version + "/NBTBase;)Lchenji/itemeditor/nbt/base/NBTBase;");
			mv.visitMethodInsn(INVOKEVIRTUAL, "chenji/itemeditor/nbt/base/NBTTagList", "add", "(Lchenji/itemeditor/nbt/base/NBTBase;)Lchenji/itemeditor/nbt/base/NBTTagList;");
			mv.visitInsn(POP);
			Label l13 = new Label();
			mv.visitLabel(l13);
			mv.visitIincInsn(5, 1);
			mv.visitLabel(l11);
			mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
			mv.visitVarInsn(ILOAD, 5);
			mv.visitVarInsn(ILOAD, 4);
			mv.visitJumpInsn(IF_ICMPLE, l12);
			Label l14 = new Label();
			mv.visitLabel(l14);
			mv.visitVarInsn(ALOAD, 3);
			mv.visitInsn(ARETURN);
			Label l15 = new Label();
			mv.visitLabel(l15);
			mv.visitMaxs(4, 6);
			mv.visitEnd();
		}
		{
			mv = cw.visitMethod(ACC_PUBLIC, "asLocalNBTBaseCopy", "(Lnet/minecraft/server/" + this.version + "/NBTBase;)Lchenji/itemeditor/nbt/base/NBTBase;", null, null);
			mv.visitCode();
			Label l0 = new Label();
			mv.visitLabel(l0);
			mv.visitVarInsn(ALOAD, 1);
			Label l1 = new Label();
			mv.visitJumpInsn(IFNONNULL, l1);
			Label l2 = new Label();
			mv.visitLabel(l2);
			mv.visitInsn(ACONST_NULL);
			mv.visitInsn(ARETURN);
			mv.visitLabel(l1);
			mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
			mv.visitVarInsn(ALOAD, 1);
			mv.visitMethodInsn(INVOKEVIRTUAL, "net/minecraft/server/" + this.version + "/NBTBase", "getTypeId", "()B");
			mv.visitVarInsn(ISTORE, 2);
			Label l3 = new Label();
			mv.visitLabel(l3);
			mv.visitVarInsn(ILOAD, 2);
			Label l4 = new Label();
			Label l5 = new Label();
			Label l6 = new Label();
			Label l7 = new Label();
			Label l8 = new Label();
			Label l9 = new Label();
			Label l10 = new Label();
			Label l11 = new Label();
			Label l12 = new Label();
			Label l13 = new Label();
			Label l14 = new Label();
			Label l15 = new Label();
			Label l16 = new Label();
			mv.visitTableSwitchInsn(0, 11, l16, new Label[] { l4, l5, l6, l7, l8, l9, l10, l11, l12, l13, l14, l15 });
			mv.visitLabel(l4);
			mv.visitFrame(Opcodes.F_APPEND, 1, new Object[] { Opcodes.INTEGER }, 0, null);
			mv.visitTypeInsn(NEW, "chenji/itemeditor/nbt/base/NBTTagEnd");
			mv.visitInsn(DUP);
			mv.visitMethodInsn(INVOKESPECIAL, "chenji/itemeditor/nbt/base/NBTTagEnd", "<init>", "()V");
			mv.visitInsn(ARETURN);
			mv.visitLabel(l5);
			mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
			mv.visitTypeInsn(NEW, "chenji/itemeditor/nbt/base/NBTTagByte");
			mv.visitInsn(DUP);
			mv.visitVarInsn(ALOAD, 1);
			mv.visitTypeInsn(CHECKCAST, "net/minecraft/server/" + this.version + "/NBTTagByte");
			mv.visitMethodInsn(INVOKEVIRTUAL, "net/minecraft/server/" + this.version + "/NBTTagByte", ReflectTool.Byte, "()B");
			mv.visitMethodInsn(INVOKESPECIAL, "chenji/itemeditor/nbt/base/NBTTagByte", "<init>", "(B)V");
			mv.visitInsn(ARETURN);
			mv.visitLabel(l6);
			mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
			mv.visitTypeInsn(NEW, "chenji/itemeditor/nbt/base/NBTTagShort");
			mv.visitInsn(DUP);
			mv.visitVarInsn(ALOAD, 1);
			mv.visitTypeInsn(CHECKCAST, "net/minecraft/server/" + this.version + "/NBTTagShort");
			mv.visitMethodInsn(INVOKEVIRTUAL, "net/minecraft/server/" + this.version + "/NBTTagShort", ReflectTool.Short, "()S");
			mv.visitMethodInsn(INVOKESPECIAL, "chenji/itemeditor/nbt/base/NBTTagShort", "<init>", "(S)V");
			mv.visitInsn(ARETURN);
			mv.visitLabel(l7);
			mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
			mv.visitTypeInsn(NEW, "chenji/itemeditor/nbt/base/NBTTagInt");
			mv.visitInsn(DUP);
			mv.visitVarInsn(ALOAD, 1);
			mv.visitTypeInsn(CHECKCAST, "net/minecraft/server/" + this.version + "/NBTTagInt");
			mv.visitMethodInsn(INVOKEVIRTUAL, "net/minecraft/server/" + this.version + "/NBTTagInt", ReflectTool.Int, "()I");
			mv.visitMethodInsn(INVOKESPECIAL, "chenji/itemeditor/nbt/base/NBTTagInt", "<init>", "(I)V");
			mv.visitInsn(ARETURN);
			mv.visitLabel(l8);
			mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
			mv.visitTypeInsn(NEW, "chenji/itemeditor/nbt/base/NBTTagLong");
			mv.visitInsn(DUP);
			mv.visitVarInsn(ALOAD, 1);
			mv.visitTypeInsn(CHECKCAST, "net/minecraft/server/" + this.version + "/NBTTagLong");
			mv.visitMethodInsn(INVOKEVIRTUAL, "net/minecraft/server/" + this.version + "/NBTTagLong", ReflectTool.Long, "()J");
			mv.visitMethodInsn(INVOKESPECIAL, "chenji/itemeditor/nbt/base/NBTTagLong", "<init>", "(J)V");
			mv.visitInsn(ARETURN);
			mv.visitLabel(l9);
			mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
			mv.visitTypeInsn(NEW, "chenji/itemeditor/nbt/base/NBTTagFloat");
			mv.visitInsn(DUP);
			mv.visitVarInsn(ALOAD, 1);
			mv.visitTypeInsn(CHECKCAST, "net/minecraft/server/" + this.version + "/NBTTagFloat");
			mv.visitMethodInsn(INVOKEVIRTUAL, "net/minecraft/server/" + this.version + "/NBTTagFloat", ReflectTool.Float, "()F");
			mv.visitMethodInsn(INVOKESPECIAL, "chenji/itemeditor/nbt/base/NBTTagFloat", "<init>", "(F)V");
			mv.visitInsn(ARETURN);
			mv.visitLabel(l10);
			mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
			mv.visitTypeInsn(NEW, "chenji/itemeditor/nbt/base/NBTTagDouble");
			mv.visitInsn(DUP);
			mv.visitVarInsn(ALOAD, 1);
			mv.visitTypeInsn(CHECKCAST, "net/minecraft/server/" + this.version + "/NBTTagDouble");
			mv.visitMethodInsn(INVOKEVIRTUAL, "net/minecraft/server/" + this.version + "/NBTTagDouble", ReflectTool.Double, "()D");
			mv.visitMethodInsn(INVOKESPECIAL, "chenji/itemeditor/nbt/base/NBTTagDouble", "<init>", "(D)V");
			mv.visitInsn(ARETURN);
			mv.visitLabel(l11);
			mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
			mv.visitTypeInsn(NEW, "chenji/itemeditor/nbt/base/NBTTagByteArray");
			mv.visitInsn(DUP);
			mv.visitVarInsn(ALOAD, 1);
			mv.visitTypeInsn(CHECKCAST, "net/minecraft/server/" + this.version + "/NBTTagByteArray");
			mv.visitMethodInsn(INVOKEVIRTUAL, "net/minecraft/server/" + this.version + "/NBTTagByteArray", "c", "()[B");
			mv.visitMethodInsn(INVOKESPECIAL, "chenji/itemeditor/nbt/base/NBTTagByteArray", "<init>", "([B)V");
			mv.visitInsn(ARETURN);
			mv.visitLabel(l15);
			mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
			mv.visitTypeInsn(NEW, "chenji/itemeditor/nbt/base/NBTTagIntArray");
			mv.visitInsn(DUP);
			mv.visitVarInsn(ALOAD, 1);
			mv.visitTypeInsn(CHECKCAST, "net/minecraft/server/" + this.version + "/NBTTagIntArray");
			mv.visitMethodInsn(INVOKEVIRTUAL, "net/minecraft/server/" + this.version + "/NBTTagIntArray", "c", "()[I");
			mv.visitMethodInsn(INVOKESPECIAL, "chenji/itemeditor/nbt/base/NBTTagIntArray", "<init>", "([I)V");
			mv.visitInsn(ARETURN);
			mv.visitLabel(l12);
			mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
			mv.visitTypeInsn(NEW, "chenji/itemeditor/nbt/base/NBTTagString");
			mv.visitInsn(DUP);
			mv.visitVarInsn(ALOAD, 1);
			mv.visitTypeInsn(CHECKCAST, "net/minecraft/server/" + this.version + "/NBTTagString");
			mv.visitMethodInsn(INVOKEVIRTUAL, "net/minecraft/server/" + this.version + "/NBTTagString", ReflectTool.STRING, "()Ljava/lang/String;");
			mv.visitMethodInsn(INVOKESPECIAL, "chenji/itemeditor/nbt/base/NBTTagString", "<init>", "(Ljava/lang/String;)V");
			mv.visitInsn(ARETURN);
			mv.visitLabel(l13);
			mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
			mv.visitVarInsn(ALOAD, 0);
			mv.visitVarInsn(ALOAD, 1);
			mv.visitTypeInsn(CHECKCAST, "net/minecraft/server/" + this.version + "/NBTTagList");
			mv.visitMethodInsn(INVOKEVIRTUAL, "chenji/asm/itemeditor/NBTTagTool", "asLocalNBTTagListCopy", "(Ljava/lang/Object;)Lchenji/itemeditor/nbt/base/NBTTagList;");
			mv.visitInsn(ARETURN);
			mv.visitLabel(l14);
			mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
			mv.visitVarInsn(ALOAD, 0);
			mv.visitVarInsn(ALOAD, 1);
			mv.visitTypeInsn(CHECKCAST, "net/minecraft/server/" + this.version + "/NBTTagCompound");
			mv.visitMethodInsn(INVOKEVIRTUAL, "chenji/asm/itemeditor/NBTTagTool", "asLocalNBTTagCompoundCopy", "(Ljava/lang/Object;)Lchenji/itemeditor/nbt/base/NBTTagCompound;");
			mv.visitInsn(ARETURN);
			mv.visitLabel(l16);
			mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
			mv.visitInsn(ACONST_NULL);
			mv.visitInsn(ARETURN);
			Label l17 = new Label();
			mv.visitLabel(l17);
			mv.visitMaxs(4, 3);
			mv.visitEnd();
		}
		{
			mv = cw.visitMethod(ACC_PUBLIC, "getNMSVersion", "()Ljava/lang/String;", null, null);
			mv.visitCode();
			Label l0 = new Label();
			mv.visitLabel(l0);
			mv.visitFieldInsn(GETSTATIC, "chenji/asm/itemeditor/NBTTagTool", "name", "Ljava/lang/String;");
			mv.visitInsn(ARETURN);
			Label l1 = new Label();
			mv.visitLabel(l1);
			mv.visitMaxs(1, 1);
			mv.visitEnd();
		}
		{
			mv = cw.visitMethod(ACC_PUBLIC, "getVersion", "()I", null, null);
			mv.visitCode();
			Label l0 = new Label();
			mv.visitLabel(l0);
			mv.visitFieldInsn(GETSTATIC, "chenji/asm/itemeditor/NBTTagTool", "version", "I");
			mv.visitInsn(IRETURN);
			Label l1 = new Label();
			mv.visitLabel(l1);
			mv.visitMaxs(1, 1);
			mv.visitEnd();
		}
		{
			mv = cw.visitMethod(ACC_STATIC + ACC_SYNTHETIC, "$SWITCH_TABLE$chenji$itemeditor$nbt$base$NBTBaseType", "()[I", null, null);
			mv.visitCode();
			Label l0 = new Label();
			Label l1 = new Label();
			Label l2 = new Label();
			mv.visitTryCatchBlock(l0, l1, l2, "java/lang/NoSuchFieldError");
			Label l3 = new Label();
			Label l4 = new Label();
			Label l5 = new Label();
			mv.visitTryCatchBlock(l3, l4, l5, "java/lang/NoSuchFieldError");
			Label l6 = new Label();
			Label l7 = new Label();
			Label l8 = new Label();
			mv.visitTryCatchBlock(l6, l7, l8, "java/lang/NoSuchFieldError");
			Label l9 = new Label();
			Label l10 = new Label();
			Label l11 = new Label();
			mv.visitTryCatchBlock(l9, l10, l11, "java/lang/NoSuchFieldError");
			Label l12 = new Label();
			Label l13 = new Label();
			Label l14 = new Label();
			mv.visitTryCatchBlock(l12, l13, l14, "java/lang/NoSuchFieldError");
			Label l15 = new Label();
			Label l16 = new Label();
			Label l17 = new Label();
			mv.visitTryCatchBlock(l15, l16, l17, "java/lang/NoSuchFieldError");
			Label l18 = new Label();
			Label l19 = new Label();
			Label l20 = new Label();
			mv.visitTryCatchBlock(l18, l19, l20, "java/lang/NoSuchFieldError");
			Label l21 = new Label();
			Label l22 = new Label();
			Label l23 = new Label();
			mv.visitTryCatchBlock(l21, l22, l23, "java/lang/NoSuchFieldError");
			Label l24 = new Label();
			Label l25 = new Label();
			Label l26 = new Label();
			mv.visitTryCatchBlock(l24, l25, l26, "java/lang/NoSuchFieldError");
			Label l27 = new Label();
			Label l28 = new Label();
			Label l29 = new Label();
			mv.visitTryCatchBlock(l27, l28, l29, "java/lang/NoSuchFieldError");
			Label l30 = new Label();
			Label l31 = new Label();
			Label l32 = new Label();
			mv.visitTryCatchBlock(l30, l31, l32, "java/lang/NoSuchFieldError");
			Label l33 = new Label();
			Label l34 = new Label();
			Label l35 = new Label();
			mv.visitTryCatchBlock(l33, l34, l35, "java/lang/NoSuchFieldError");
			Label l36 = new Label();
			Label l37 = new Label();
			Label l38 = new Label();
			mv.visitTryCatchBlock(l36, l37, l38, "java/lang/NoSuchFieldError");
			Label l39 = new Label();
			mv.visitLabel(l39);
			mv.visitFieldInsn(GETSTATIC, "chenji/asm/itemeditor/NBTTagTool", "$SWITCH_TABLE$chenji$itemeditor$nbt$base$NBTBaseType", "[I");
			mv.visitInsn(DUP);
			Label l40 = new Label();
			mv.visitJumpInsn(IFNULL, l40);
			mv.visitInsn(ARETURN);
			mv.visitLabel(l40);
			mv.visitFrame(Opcodes.F_SAME1, 0, null, 1, new Object[] { "[I" });
			mv.visitInsn(POP);
			mv.visitMethodInsn(INVOKESTATIC, "chenji/itemeditor/nbt/base/NBTBaseType", "values", "()[Lchenji/itemeditor/nbt/base/NBTBaseType;");
			mv.visitInsn(ARRAYLENGTH);
			mv.visitIntInsn(NEWARRAY, T_INT);
			mv.visitVarInsn(ASTORE, 0);
			mv.visitLabel(l0);
			mv.visitVarInsn(ALOAD, 0);
			mv.visitFieldInsn(GETSTATIC, "chenji/itemeditor/nbt/base/NBTBaseType", "BOOLEAN", "Lchenji/itemeditor/nbt/base/NBTBaseType;");
			mv.visitMethodInsn(INVOKEVIRTUAL, "chenji/itemeditor/nbt/base/NBTBaseType", "ordinal", "()I");
			mv.visitIntInsn(BIPUSH, 12);
			mv.visitInsn(IASTORE);
			mv.visitLabel(l1);
			mv.visitJumpInsn(GOTO, l3);
			mv.visitLabel(l2);
			mv.visitFrame(Opcodes.F_FULL, 1, new Object[] { "[I" }, 1, new Object[] { "java/lang/NoSuchFieldError" });
			mv.visitInsn(POP);
			mv.visitLabel(l3);
			mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
			mv.visitVarInsn(ALOAD, 0);
			mv.visitFieldInsn(GETSTATIC, "chenji/itemeditor/nbt/base/NBTBaseType", "BYTE", "Lchenji/itemeditor/nbt/base/NBTBaseType;");
			mv.visitMethodInsn(INVOKEVIRTUAL, "chenji/itemeditor/nbt/base/NBTBaseType", "ordinal", "()I");
			mv.visitInsn(ICONST_2);
			mv.visitInsn(IASTORE);
			mv.visitLabel(l4);
			mv.visitJumpInsn(GOTO, l6);
			mv.visitLabel(l5);
			mv.visitFrame(Opcodes.F_SAME1, 0, null, 1, new Object[] { "java/lang/NoSuchFieldError" });
			mv.visitInsn(POP);
			mv.visitLabel(l6);
			mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
			mv.visitVarInsn(ALOAD, 0);
			mv.visitFieldInsn(GETSTATIC, "chenji/itemeditor/nbt/base/NBTBaseType", "BYTEARRAY", "Lchenji/itemeditor/nbt/base/NBTBaseType;");
			mv.visitMethodInsn(INVOKEVIRTUAL, "chenji/itemeditor/nbt/base/NBTBaseType", "ordinal", "()I");
			mv.visitIntInsn(BIPUSH, 7);
			mv.visitInsn(IASTORE);
			mv.visitLabel(l7);
			mv.visitJumpInsn(GOTO, l9);
			mv.visitLabel(l8);
			mv.visitFrame(Opcodes.F_SAME1, 0, null, 1, new Object[] { "java/lang/NoSuchFieldError" });
			mv.visitInsn(POP);
			mv.visitLabel(l9);
			mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
			mv.visitVarInsn(ALOAD, 0);
			mv.visitFieldInsn(GETSTATIC, "chenji/itemeditor/nbt/base/NBTBaseType", "DOUBLE", "Lchenji/itemeditor/nbt/base/NBTBaseType;");
			mv.visitMethodInsn(INVOKEVIRTUAL, "chenji/itemeditor/nbt/base/NBTBaseType", "ordinal", "()I");
			mv.visitInsn(ICONST_3);
			mv.visitInsn(IASTORE);
			mv.visitLabel(l10);
			mv.visitJumpInsn(GOTO, l12);
			mv.visitLabel(l11);
			mv.visitFrame(Opcodes.F_SAME1, 0, null, 1, new Object[] { "java/lang/NoSuchFieldError" });
			mv.visitInsn(POP);
			mv.visitLabel(l12);
			mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
			mv.visitVarInsn(ALOAD, 0);
			mv.visitFieldInsn(GETSTATIC, "chenji/itemeditor/nbt/base/NBTBaseType", "END", "Lchenji/itemeditor/nbt/base/NBTBaseType;");
			mv.visitMethodInsn(INVOKEVIRTUAL, "chenji/itemeditor/nbt/base/NBTBaseType", "ordinal", "()I");
			mv.visitIntInsn(BIPUSH, 13);
			mv.visitInsn(IASTORE);
			mv.visitLabel(l13);
			mv.visitJumpInsn(GOTO, l15);
			mv.visitLabel(l14);
			mv.visitFrame(Opcodes.F_SAME1, 0, null, 1, new Object[] { "java/lang/NoSuchFieldError" });
			mv.visitInsn(POP);
			mv.visitLabel(l15);
			mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
			mv.visitVarInsn(ALOAD, 0);
			mv.visitFieldInsn(GETSTATIC, "chenji/itemeditor/nbt/base/NBTBaseType", "FLOAT", "Lchenji/itemeditor/nbt/base/NBTBaseType;");
			mv.visitMethodInsn(INVOKEVIRTUAL, "chenji/itemeditor/nbt/base/NBTBaseType", "ordinal", "()I");
			mv.visitInsn(ICONST_4);
			mv.visitInsn(IASTORE);
			mv.visitLabel(l16);
			mv.visitJumpInsn(GOTO, l18);
			mv.visitLabel(l17);
			mv.visitFrame(Opcodes.F_SAME1, 0, null, 1, new Object[] { "java/lang/NoSuchFieldError" });
			mv.visitInsn(POP);
			mv.visitLabel(l18);
			mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
			mv.visitVarInsn(ALOAD, 0);
			mv.visitFieldInsn(GETSTATIC, "chenji/itemeditor/nbt/base/NBTBaseType", "INTARRAY", "Lchenji/itemeditor/nbt/base/NBTBaseType;");
			mv.visitMethodInsn(INVOKEVIRTUAL, "chenji/itemeditor/nbt/base/NBTBaseType", "ordinal", "()I");
			mv.visitIntInsn(BIPUSH, 6);
			mv.visitInsn(IASTORE);
			mv.visitLabel(l19);
			mv.visitJumpInsn(GOTO, l21);
			mv.visitLabel(l20);
			mv.visitFrame(Opcodes.F_SAME1, 0, null, 1, new Object[] { "java/lang/NoSuchFieldError" });
			mv.visitInsn(POP);
			mv.visitLabel(l21);
			mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
			mv.visitVarInsn(ALOAD, 0);
			mv.visitFieldInsn(GETSTATIC, "chenji/itemeditor/nbt/base/NBTBaseType", "INTEGER", "Lchenji/itemeditor/nbt/base/NBTBaseType;");
			mv.visitMethodInsn(INVOKEVIRTUAL, "chenji/itemeditor/nbt/base/NBTBaseType", "ordinal", "()I");
			mv.visitInsn(ICONST_5);
			mv.visitInsn(IASTORE);
			mv.visitLabel(l22);
			mv.visitJumpInsn(GOTO, l24);
			mv.visitLabel(l23);
			mv.visitFrame(Opcodes.F_SAME1, 0, null, 1, new Object[] { "java/lang/NoSuchFieldError" });
			mv.visitInsn(POP);
			mv.visitLabel(l24);
			mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
			mv.visitVarInsn(ALOAD, 0);
			mv.visitFieldInsn(GETSTATIC, "chenji/itemeditor/nbt/base/NBTBaseType", "LONG", "Lchenji/itemeditor/nbt/base/NBTBaseType;");
			mv.visitMethodInsn(INVOKEVIRTUAL, "chenji/itemeditor/nbt/base/NBTBaseType", "ordinal", "()I");
			mv.visitIntInsn(BIPUSH, 10);
			mv.visitInsn(IASTORE);
			mv.visitLabel(l25);
			mv.visitJumpInsn(GOTO, l27);
			mv.visitLabel(l26);
			mv.visitFrame(Opcodes.F_SAME1, 0, null, 1, new Object[] { "java/lang/NoSuchFieldError" });
			mv.visitInsn(POP);
			mv.visitLabel(l27);
			mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
			mv.visitVarInsn(ALOAD, 0);
			mv.visitFieldInsn(GETSTATIC, "chenji/itemeditor/nbt/base/NBTBaseType", "NBTTAGCOMPOUND", "Lchenji/itemeditor/nbt/base/NBTBaseType;");
			mv.visitMethodInsn(INVOKEVIRTUAL, "chenji/itemeditor/nbt/base/NBTBaseType", "ordinal", "()I");
			mv.visitIntInsn(BIPUSH, 8);
			mv.visitInsn(IASTORE);
			mv.visitLabel(l28);
			mv.visitJumpInsn(GOTO, l30);
			mv.visitLabel(l29);
			mv.visitFrame(Opcodes.F_SAME1, 0, null, 1, new Object[] { "java/lang/NoSuchFieldError" });
			mv.visitInsn(POP);
			mv.visitLabel(l30);
			mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
			mv.visitVarInsn(ALOAD, 0);
			mv.visitFieldInsn(GETSTATIC, "chenji/itemeditor/nbt/base/NBTBaseType", "NBTTAGLIST", "Lchenji/itemeditor/nbt/base/NBTBaseType;");
			mv.visitMethodInsn(INVOKEVIRTUAL, "chenji/itemeditor/nbt/base/NBTBaseType", "ordinal", "()I");
			mv.visitIntInsn(BIPUSH, 9);
			mv.visitInsn(IASTORE);
			mv.visitLabel(l31);
			mv.visitJumpInsn(GOTO, l33);
			mv.visitLabel(l32);
			mv.visitFrame(Opcodes.F_SAME1, 0, null, 1, new Object[] { "java/lang/NoSuchFieldError" });
			mv.visitInsn(POP);
			mv.visitLabel(l33);
			mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
			mv.visitVarInsn(ALOAD, 0);
			mv.visitFieldInsn(GETSTATIC, "chenji/itemeditor/nbt/base/NBTBaseType", "SHORT", "Lchenji/itemeditor/nbt/base/NBTBaseType;");
			mv.visitMethodInsn(INVOKEVIRTUAL, "chenji/itemeditor/nbt/base/NBTBaseType", "ordinal", "()I");
			mv.visitIntInsn(BIPUSH, 11);
			mv.visitInsn(IASTORE);
			mv.visitLabel(l34);
			mv.visitJumpInsn(GOTO, l36);
			mv.visitLabel(l35);
			mv.visitFrame(Opcodes.F_SAME1, 0, null, 1, new Object[] { "java/lang/NoSuchFieldError" });
			mv.visitInsn(POP);
			mv.visitLabel(l36);
			mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
			mv.visitVarInsn(ALOAD, 0);
			mv.visitFieldInsn(GETSTATIC, "chenji/itemeditor/nbt/base/NBTBaseType", "STRING", "Lchenji/itemeditor/nbt/base/NBTBaseType;");
			mv.visitMethodInsn(INVOKEVIRTUAL, "chenji/itemeditor/nbt/base/NBTBaseType", "ordinal", "()I");
			mv.visitInsn(ICONST_1);
			mv.visitInsn(IASTORE);
			mv.visitLabel(l37);
			Label l41 = new Label();
			mv.visitJumpInsn(GOTO, l41);
			mv.visitLabel(l38);
			mv.visitFrame(Opcodes.F_SAME1, 0, null, 1, new Object[] { "java/lang/NoSuchFieldError" });
			mv.visitInsn(POP);
			mv.visitLabel(l41);
			mv.visitFrame(Opcodes.F_SAME, 0, null, 0, null);
			mv.visitVarInsn(ALOAD, 0);
			mv.visitInsn(DUP);
			mv.visitFieldInsn(PUTSTATIC, "chenji/asm/itemeditor/NBTTagTool", "$SWITCH_TABLE$chenji$itemeditor$nbt$base$NBTBaseType", "[I");
			mv.visitInsn(ARETURN);
			mv.visitMaxs(3, 1);
			mv.visitEnd();
		}
		cw.visitEnd();

		return cw.toByteArray();

	}

	public String getVersion() {
		return this.version;
	}
}
